가상화 기술이란?
가상화 기술이란 물리적인 컴퓨터 내부에서 논리적인 여러 컴퓨팅 환경을 띄우는 것을 말한다.
왜 사용할까?
가상화 기술을 사용하는 이유를 알기 위해 가상화 기술을 사용하지 않았을 때 발생하는 문제에 대해 살펴보자.
하나의 물리적인 컴퓨터에서 여러 프로그램을 구동한다고 하면, 이 프로세스들은 호스트 머신의 리소스를 공유하게 된다. 따라서 한 프로세스의 에러가 전이될 수도 있고, 한 프로세스의 사용량 급증으로 인해 리소스를 더 많이 사용해 다른 프로세스들이 정상적으로 작동하지 않을 수도 있다.
문제점
- 에러 전이
- 사용량 급증
위와 같은 문제를 해결하기 위해 가상화 기술을 사용하는 것이다. 위 문제가 발생하는 이유는 여러 프로세스가 호스트 머신의 리소스를 공유하기 때문이다. 따라서 프로세스 별로 사용할 수 있는 리소스를 제한해 환경을 논리적으로 구분하면 위 문제를 근본적으로 해결할 수 있다.
해결
- 에러 전이: 격리를 통해 하나의 프로세스 에러가 다른 프로세스에 영향을 주지 못하게 한다.
- 사용량 급증: 각 환경의 리소스를 제한시킴으로써 다른 환경에 영향을 주지 못하게 한다.
추가로 가상화 기술은 필요에 따라 가상 환경의 크기를 조정하거나 새로운 인스턴스를 추가하는 등 효율적인 인프라 관리를 가능하게 한다.
가상화 방식
하이퍼 바이저
전통적인 가상화 방식으로 호스트 OS 위에 가상 머신을 띄워 게스트 OS를 설치하고, 해당 가상 머신에서 프로세스를 실행하는 방식이다. 이때 가상 머신은 호스트 OS와 별개의 OS를 사용한다는 것이 중요하다.
프로세스가 리소스를 사용할 때 OS의 커널에 요청을 보낸다. 이때 System Call이라는 표준을 이용하는데 OS 마다 다른 System Call을 사용한다. 그렇다면 가상 머신의 게스트 OS가 어떻게 호스트 머신의 리소스를 사용할 수 있을까? 바로 하이퍼 바이저가 이 역할을 수행한다.
하이퍼 바이저는 게스트 OS의 System Call이 정상적으로 수행될 수 있도록 가상 머신과 실제 하드웨어 사이에서 중재자 역할을 해준다.
컨테이너
컨테이너 가상화는 하이퍼 바이저 방식과 다르게 호스트 OS를 공유한다. 하이퍼 바이저 방식처럼 소프트웨어가 공간을 격리 시키는 것이 아닌 리눅스의 격리 기술을 이용해 커널이 직접 공간을 격리시킨다.
별도의 게스트 OS 설치, 부팅이 필요 없기 때문에 컨테이너 가상화는 빠르고 가볍다는 강력한 장점을 가진다. 따라서 현대 애플리케이션 운영 환경에서 더 선호된다.
하지만 호스트 OS의 커널을 공유하기 때문에 비교적 보안에 취약하다는 단점이 있다.